package com.jaeke.transaction;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;


// 编程事物   （需要手动begin 手动回滚 手动提交）
@Component    // 注入到Spring容器中   此时最好使用原型的   不要使用单例的 会出现线程安全的问题
                // 因为类中是共享的
public class TransactionUtils {

    // 获取事物源
    @Autowired
    private DataSourceTransactionManager dataSourceTransactionManager;

    // 开启事务
    public TransactionStatus begin() {
        // 设置默认传播级别
        TransactionStatus transactionStatus =
                dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());

        return transactionStatus;
    }

    // 提交事物
    public void commit(TransactionStatus transactionStatus) {
        dataSourceTransactionManager.commit(transactionStatus);
    }

    // 回滚事务
    public void rollBack(TransactionStatus transactionStatus) {

        dataSourceTransactionManager.rollback(transactionStatus);
    }



}
